/*
* 作者: wupengxin
* 创建时间:
*/
package common

import (
	"os"
	"container/list"
	"errors"
	"time"
	"log"
	"runtime"
)

func GenarateStringChannel(len int) []chan map[string]string {
	channels := make([]chan map[string]string, len)
	// 必须初始化 go 在此时只是指向一个空的数组 还没有为其初始化一个chan 的通道
	for i:=0; i< len; i++{
		channels[i] = make(chan map[string]string)
	}
	return channels
}

func Exit(e error){
	if e!=nil{
		_, file, line, _ :=runtime.Caller(1)
		log.Println(time.Now(), file, "@", line, ":", e)
		os.Exit(-1)
	}
}

// 删除某一个通道
func DeleteChannelsByIndex(index int, s []chan string)  ([]chan string, error){
	if index >= len(s){
		return nil, errors.New("can not find the index")
	}

	if index == 0{
		return s[1:], nil
	}
	if index+1 == len(s){
		return s[0: index], nil
	}
	t := s[0: index]
	//tmp := make([]chan string, len(s)-1)
	//at := copy(tmp, t)
	//copy(tmp[at:], s[index+1:])
	t = append(t, s[index+1:]...)
	return t, nil
}

// 转换切片到列表 加快删除速度
func SlicToList(s []interface{}) *list.List{
	l := list.New()
	for _, v := range s{
		l.PushBack(v)
	}
	return l
}

// 删除列表中的某个元素
func DeleteListElement(l *list.List, v interface{})(bool, *list.Element){
	for e := l.Front(); e != nil; e = e.Next() {
      if e.Value == v {
            return true, e
        }
    }
	return false, nil
}